#function(conf)
local dat=table();

dat.conf=conf;
dat.args=[];
dat.link_c=function(name,id,path,value)
{
	local d=table();
	d.name=name;
	d.id=id;
	d.path=path;
	d.value=value;
	this.args.push(d);
};

dat.apply_evtmgr=function(ec)
{
	for(v in this.args)
	{
		local n=typeid(v.value);
		if(n==5)
		{
			ec.wm_var(v.name,v.id,this.conf.get_string(v.path,v.value));
		}
		else if(n==2)
		{
			ec.wm_var(v.name,v.id,this.conf.get_integer(v.path,v.value));		
		}
		else
		{
			throw "invalid value type "..n;
		}
	}
};

dat.apply_data=function(data)
{
	for(v in this.args)
	{
		local n=typeid(v.value);
		if(n==5)
		{
			this.conf.set_string(v.path,data[v.id]);	
		}
		else if(n==2)
		{
			this.conf.set_integer(v.path,data[v.id]);				
		}
		else
		{
			throw "invalid value type "..n;
		}
	}

};

dat.bind_link=function(subject,pre_path,pre_id)
{
	local x=this;
	if(pre_id==nil)
	{
		pre_id=subject.."_";
	}
	
	return function(name,value)
	{
		x.link_c(name.."#"..subject,pre_id..name,pre_path.."/"..name,value);
	};
};

return dat;
